perm filename CTRACE[C,JRA] blob sn#046883 filedate 1973-06-06 generic text, type T, neo UTF8
00100	(DEFUN CTRACE FEXPR (SPECS) (MAPCAR 'TRACE1 SPECS))
00200	
00300	
00400	(DEFUN CUNTRACE FEXPR (PROCNS)
00500	   (MAPCAR '(LAMBDA (PROCN)
00600	               (PROG (TFUNC)
00700	                  (SETQ TFUNC (GET PROCN 'CEXPR))
00800	                  (RETURN (COND ((AND TFUNC (EQ (CADR TFUNC) '"AUX"))
00900	                                 (PUTPROP PROCN (CDADR (CADAR (LAST (CADDR TFUNC)))) 'CEXPR)
01000	                                 PROCN)
01100	                                ('?)   ))))
01200	           PROCNS)   )
01300	
01400	
01500	(DEFUN TRACE1 (SPEC)
01600	   (PROG (PROCN OFUNC ARGL SPEC1)
01700	      (AND (ATOM SPEC)
01800	           (SETQ SPEC !"(@SPEC EN @'(DISPLAY *ARGS) EX @'(DISPLAY *VAL))))
01900	      (SETQ PROCN (CAR SPEC)
02000	            OFUNC (GET PROCN 'CEXPR))
02100	      (OR OFUNC (RETURN !"(@PROCN *NON FUNCTION*)))
02200	      (PUTPROP PROCN 
02300	               !"(@(SETQ ARGL (CAR OFUNC))
02400	                  "AUX" ((*ARGS @(ARGVALS ARGL))
02500	                         *VAL
02600	                         (*OFUNC '(CLAMBDA . @OFUNC)))
02700	                  !@(COND ((SETQ SPEC1 (MEMQ 'EN SPEC))
02800	                           !"((PRINT '(ENTERING @PROCN))
02900	                              . @(UPTONEXTATOM (CDR SPEC1))))   )
03000	                  (CSETQ *VAL (CEVAL !"(CALL *OFUNC . (@'/@ CALLCROCK '@ARGL))))
03100	                  !@(COND ((SETQ SPEC1 (MEMQ 'EX SPEC))
03200	                           !"((PRINT '(EXITING @PROCN))
03300	                              . @(UPTONEXTATOM (CDR SPEC1))))   )
03400	                  *VAL)
03500	               'CEXPR)
03600	      (RETURN PROCN)   ))(DEFUN CALLCROCK (DECLS)
03700	   (COND ((NULL DECLS) NIL)
03800	         ((EQ (CAR DECLS) '"OPTIONAL")
03900	          (CALLCROCK (CDR DECLS)))
04000	         ((EQ (CAR DECLS) '"REST")
04100	          ((LAMBDA (S)
04200	              (COND ((EQ (CAR S) 'RVALUE)
04300	                     (MAPCAR '(LAMBDA (V) !"(QUOTE @V)) (EVAL S)))
04400	                    (S)   ))
04500	           (CALLCROCK1 (CADR DECLS))))
04600	         ((CONS (CALLCROCK1 (CAR DECLS)) (CALLCROCK (CDR DECLS))))   ))
04700	
04800	
04900	(DEFUN CALLCROCK1 (DECL)
05000	   (COND ((ATOM DECL) !"(RVALUE '@DECL))
05100	         ((EQ (CAR DECL) 'QUOTE) (RVALUE (CADR DECL)))
05200	         ((ATOM (CAR DECL)) !"(RVALUE '@(CAR DECL)))
05300	         ((EQ (CAAR DECL) 'QUOTE) (RVALUE (CADAR DECL)))   ))
05400	
05500	
05600	(DEFUN ARGVALS (ARGL)
05700	   (CONS '/!"
05800	         (MAPCAN '(LAMBDA (DECL)
05900	                     (COND ((MEMQ DECL '("REST" "OPTIONAL")) ())
06000	                           ((LIST
06100	                             (LIST '/,
06200	                                   (COND ((ATOM DECL) DECL)
06300	                                         ((EQ (CAR DECL) 'QUOTE) (CADR DECL))
06400	                                         ((ATOM (CAR DECL)) (CAR DECL))
06500	                                         ((EQ (CAAR DECL) 'QUOTE) (CADAR DECL))   ))))   ))
06600	                 ARGL))   )
06700	
06800	
06900	(DEFUN UPTONEXTATOM (L)
07000	   (AND L (NOT (ATOM (CAR L))) (CONS (CAR L) (UPTONEXTATOM (CDR L))))   )
07100	
07200	
07300	(DEFUN DISPLAY FEXPR (ITEMS)
07400	   (MAPC '(LAMBDA (ITEM)
07500	             (CPRINT ITEM)
07600	             (PRINC '=/ )
07700	             (CPRIN1 (COND ((ATOM ITEM) (RVALUE ITEM)) ((EVAL ITEM))   )))
07800	   ITEMS))